package com.example.cinema.toolclass;

import android.content.Context;
import android.util.Log;

import com.opensource.svgaplayer.SVGACallback;
import com.opensource.svgaplayer.SVGADrawable;
import com.opensource.svgaplayer.SVGAImageView;
import com.opensource.svgaplayer.SVGAParser;
import com.opensource.svgaplayer.SVGAVideoEntity;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

public class SvgaUtils {

    private Context context;
    private List<String> list;
    private SVGAImageView svgaImageView;
    private SVGAParser parser;//解析器

    public SvgaUtils(Context context,SVGAImageView svgaImageView) {
        this.context = context;//上下文
        this.svgaImageView = svgaImageView;//动画视图
    }


    public void init()
    {
        parser = new SVGAParser(context);//创建SVGA文件解析器
        list = new ArrayList<>();
        //监听动画周期
        svgaImageView.setCallback(new SVGACallback() {
            @Override //暂停回调
            public void onPause() {

            }
            @Override//未完成
            public void onFinished() {

            }

            @Override//重复
            public void onRepeat()
            {
            }

            @Override //步骤
            public void onStep(int i, double v) {

            }
        });
    }

    //启动动画
    public void startAnimator(String svganame)
    {
        list.add(list.size(),svganame+".svga");
        if(list.size()>= 1)
        {
            //解析动画
            ParseSvga();
        }
    }
    //停止动画
    public void stopSvga()
    {
        if(svgaImageView.isAnimating() && list.size() == 0)
        {
            svgaImageView.stopAnimation();
        }
    }
    //解析加载动画
    private void ParseSvga()
    {
        if(list.size() < 1)
        {
            stopSvga();
            return;
        }
        parser.decodeFromAssets(list.get(0), new SVGAParser.ParseCompletion() {
            @Override //解析成功 返回动画视频实体
            public void onComplete(@NotNull SVGAVideoEntity svgaVideoEntity) {
                SVGADrawable drawable = new SVGADrawable(svgaVideoEntity);//转换成可绘制资源
                svgaImageView.setImageDrawable(drawable);//将资源传递给svga视图
                svgaImageView.setLoops(0);//执行次数 不设置则无限循环
                svgaImageView.startAnimation();
            }

            @Override //解析失败
            public void onError() {
                if(list.size()>0)//判断动画是否大于零
                {//删除失败的动画
                    list.remove(0);
                    ParseSvga();//继续解析
                }
            }
        });
    }

}
